<?php

require 'app/autoload.php';
require 'app/array.php';
require 'app/lang.php';

if (file_exists('conf.php')) {
    $conf = include('conf.php');
} else {
    $conf = include('conf_default.php');
}

// Peut-etre on doit changer ca chacun!
define('BASE_URL', 'http://localhost/projet-sgbd-2012/');

// Setup custom Twig view
require_once('vendor/slim/extras/Slim/Extras/Views/Extension/Twig/Extensions/Slim.php');
\Slim\Extras\Views\Twig::$twigExtensions = array(
    new \Twig_Extensions_Slim
);
$twigView = new \Slim\Extras\Views\Twig();
$twigView->appendData(array('baseURL' => BASE_URL));

try {
    $db = new \SGBD\Persistance\DB($conf['db']);
} catch (Exception $e) {
    echo 'Vous ne pouvez pas ouvrir une connexion a la base de donnees avec ces parametres: ';
    echo '<pre>' . print_r($conf, TRUE) . '</pre>';
    echo 'Pour changer les parametres, copier le fichier default_conf.php dans la racine en conf.php, et changer le contenu.';
    die();
  }

$app = new \Slim\Slim(
    array(
        'debug' => TRUE,
        'templates.path' =>  './templates',
        'view' => $twigView,
    ));

$twigView->getEnvironment()->enableDebug();
$twigView->getEnvironment()->addExtension(
    new Twig_Extension_Debug()
);
$twigView->getEnvironment()->addFunction(
    'lang', new Twig_Function_Function('lang')
);

$menu = array(
    'info' => array(),
    'resultats' => array(),
    'statistiques' => array(),
    'classement' => array(),
);
$app->view()->appendData(array('menu' => $menu));


$app->get('/', function () use ($app, $db) {
        $app->render('index.html');
    })->name('index');

$app->get('/info', function () use ($app, $db) {
        $app->render('info.html');
    })->name('info');


$statsc = new \SGBD\Controller\StatistiquesController($app, $db);
$app->get('/statistiques', array($statsc, 'indexAction'))
->name('statistiques');

$app->get('/statistiques/moyenne_points_rencontre',
          array($statsc, 'moyennePointsRencontreAction'))
->name('statistiques_moyenne_points_rencontre');

$app->get('/statistiques/moyenne_points_rencontre_saison',
          array($statsc, 'moyennePointsRencontreSaisonAction'))
->name('statistiques_moyenne_points_rencontre_saison');

$app->get('/statistiques/moyenne_points_joueur',
          array($statsc, 'moyennePointsJoueurAction'))
->name('statistiques_moyenne_points_joueur');

$app->get('/classement', array($statsc, 'classementAction')) ->name('classement');

// Clubs CRUD
$cc = new \SGBD\Controller\ClubsController($app, $db);
$app->get('/info/clubs', array($cc, 'indexAction'))->name('clubs_index');
$app->get('/info/club/:nom_club', array($cc, 'viewAction'))->name('club_view');
$app->get('/info/clubs/create', array($cc, 'newAction'))->name('clubs_new');
$app->post('/info/clubs/create', array($cc, 'createAction'))->name('clubs_create');
$app->get('/info/club/update/:nom_club', array($cc, 'editAction'))->name('club_update');
$app->post('/info/club/update/:nom_club', array($cc, 'updateAction'));
$app->get('/info/club/delete/:nom_club', array($cc, 'deleteAction'))->name('club_delete');

// Joueur CRUD
$jc = new \SGBD\Controller\JoueursController($app, $db);
$app->get('/info/joueurs', array($jc, 'indexAction'))->name('joueurs_index');
$app->get('/info/joueur/:numero_personne', array($jc, 'viewAction'))->name('joueur_view');
$app->get('/info/joueur/create/:numero_equipe', array($jc, 'newAction'))->name('joueur_new');
$app->post('/info/joueur/create/:numero_equipe', array($jc, 'createAction'))->name('joueur_create');
$app->get('/info/joueur/delete/:numero_personne', array($jc, 'deleteAction'))->name('joueur_delete');
$app->get('/info/joueur/update/:numero_personne', array($jc, 'editAction'))->name('joueur_update');
$app->post('/info/joueur/update/:numero_personne', array($jc, 'updateAction'));

// Equipes CRUD
$ec = new \SGBD\Controller\EquipesController($app, $db);
$app->get('/info/equipes', array($ec, 'indexAction'))->name('equipes_index');
$app->get('/info/equipe/:numero_equipe', array($ec, 'viewAction'))->name('equipe_view');
$app->get('/info/equipe/create/:nom_club', array($ec, 'newAction'))->name('equipe_new');
$app->post('/info/equipe/create/:nom_club', array($ec, 'createAction'))->name('equipe_create');


// Personnes CRUD
$pc = new \SGBD\Controller\PersonnesController($app, $db);
$app->get('/info/personnes', array($pc, 'indexAction'))->name('personnes_index');
$app->get('/info/personne/:numero_personne', array($pc, 'viewAction'))->name('personne_view');
$app->get('/info/personne/delete/:numero_personne', array($pc, 'deleteAction'))->name('personne_delete');
$app->get('/info/personne/update/:numero_personne', array($pc, 'editAction'))->name('personne_update');
$app->post('/info/personne/update/:numero_personne', array($pc, 'updateAction'));

// Entraineur CRUD
$ec = new \SGBD\Controller\EntraineursController($app, $db);
$app->get('/info/entraineur/create/:numero_equipe', array($ec, 'newAction'))->name('entraineur_new');
$app->get('/info/entraineur/delete/:numero_equipe/:numero_personne', array($ec, 'deleteAction'))->name('entraineur_delete');
$app->post('/info/entraineur/create/:numero_equipe', array($ec, 'createAction'));

// Resultat
$rc = new \SGBD\Controller\ResultatsController($app, $db);
$app->get('/resultats', array($rc, 'indexAction'))->name('resultats');
$app->get('/resultats/new', array($rc, 'newAction'))->name('rencontre_new');
$app->post('/resultats/new', array($rc, 'createAction'));
$app->get('/resultats/:Numero_Rencontre', array($rc, 'viewAction'))->name('rencontre_view');

$ajaxc = new \SGBD\Controller\AjaxController($app, $db);
$app->get('/ajax', array($ajaxc, 'handle'))->name('ajax');

$app->run();